#ifndef CXIADVANCEDVIEW_H
#define CXIADVANCEDVIEW_H

#include <QTreeView>
#include <QHeaderView>
#include <QToolButton>

class CxiVerticalHeaderView;

namespace cxitable { struct GridColumnConfig; }

class CxiAdvancedView : public QTreeView
{
	Q_OBJECT
public:
	explicit CxiAdvancedView(QWidget *parent = nullptr);
	~CxiAdvancedView() override;

	// 设置自定义 vertical header（本类版本，务必调用此版本以保证 m_verticalHeader 被赋值）
	void setVerticalHeader(CxiVerticalHeaderView *header);

	// 应用列配置
	void applyColumnConfig(const QList<cxitable::GridColumnConfig> &columns);

	// 覆盖 setModel 以同步 vertical header 的 model 并连接刷新信号
	void setModel(QAbstractItemModel *model) override;

	// 返回 vertical header（类型为 QHeaderView* 以兼容接口）
	QHeaderView *verticalHeader() const;

	bool isGroupingEnabled() const { return m_groupingEnabled; }




	signals:
		void connerButtonClicked();

protected:
	// 事件 / 重写
	void resizeEvent(QResizeEvent *event) override;
	void scrollContentsBy(int dx, int dy) override;
	void updateGeometries() override;

	// indexAt 需要把 widget 坐标转换到 viewport 坐标（考虑 left margin）
	QModelIndex indexAt(const QPoint &p) const override;

	// 注意：不再重写 visualRect() 与 edit()，以避免与 Qt 内部行为冲突

private slots:
	void updateCornerGeometry();
	void updateHeaderMargins();

private:
	bool m_groupingEnabled = false;
	CxiVerticalHeaderView *m_verticalHeader = nullptr;  // 垂直表头对象（由 setVerticalHeader 管理）
	QWidget *m_conerWidget = nullptr;                   // corner 容器（用于居中 checkbox 或 button）
	bool m_useCheckBox = false;                         // 运行时类型选择（可通过接口扩展）
};

#endif // CXIADVANCEDVIEW_H
